//=====================================================================
// 文件名称：includes.h
// 提供者：SD-Arm(sumcu.suda.edu.cn)
// 更新记录：20210625
// 分发授权：商用
//=====================================================================

#ifndef INCLUDES_H     // 防止重复包含（INCLUDES_H 文件头）
#define INCLUDES_H

// 使用系统的UART打印功能
extern int sys_uart_printf(const char * fmt, ...);
#define printf sys_uart_printf

//----------------------------------------------------------------------
// 第1部分：通用头文件
// #include "user.h"
#include "FreeRTOS.h"
#include "task.h"
// #include "gpio.h"
// #include "timer.h"
// #include "uart.h"
// #include "spi_nor_flash.h"
#include "interr.h"
//----------------------------------------------------------------------

// 第2部分：全局使用的宏定义
//----------------------------------------------------------------------

// 第3部分：自定义的数据类型
//----------------------------------------------------------------------

// 第4部分：全局变量的声明与标准化注意事项
// 使用宏定义控制全局变量的前缀，便于区分和管理
#ifdef GLOBLE_VAR              // 在main.c文件中定义了GLOBLE_VAR宏
  #define G_VAR_PREFIX         // 前缀G_VAR_PREFIX定义为空
#else                          // 在非main.c文件中
  #define G_VAR_PREFIX extern  // 前缀G_VAR_PREFIX定义为"extern"
#endif
// 示例：声明全局变量
// 系统级别的配置

// 用户自定义部分：
//----------------------------------------------------------------------

// 定义延时函数，映射到FreeRTOS的任务延时
#define delay_ms(x)  vTaskDelay(x)
void app_init(void);
void thread_redlight(void);
void thread_bluelight(void);
void thread_greenlight(void);
//----------------------------------------------------------------------

#endif                  // 防止重复包含（INCLUDES_H 文件尾）

/*
 知识要点：
 注1：全局使用的宏定义，统一使用全大写
 注2：全局变量应当以一个统一的前缀"g_"开头，这样可以保证全局命名的唯一性，并方便在链接时标准化
 注3：在定义全局变量时使用G_VAR_PREFIX宏，这样可以在main.c中定义变量时避免重复定义问题。
      当INCLUDES_H被包含在main.c中时，G_VAR_PREFIX为空，使得变量在main.c中定义；
      在其他源文件中包含时，G_VAR_PREFIX为extern，使得在main以外的文件中引用这些全局变量。
 */
